<?php

 // Carga de Queryx
 require_once("engine/queryx.php");

 /**
  * ---------------------------------------------------------------
  * PROFESOR CLASE 
  * ---------------------------------------------------------------
  * Funciones necesarias relacionadas con el profesor , esta clase necesita Queryx y esta a su vez
  * necesita de la clase Connect (en la cual deben especificarse los parametros de conexión)
  * están localizadas en engine.
  * 
  * @author Sergio Morlán Páramo
  */
 class Profesor_class extends Queryx {

     private $id, $nombre, $apellidos, $fecha_nacimiento, $gradoAcademico, $correoElectronico, $telefono, $perfil, $password;



     /**
      * ---------------------------------------------------------------
      * CONSTRUCTOR
      * ---------------------------------------------------------------
      */
     public function __construct($p_id = FALSE) {
         parent::__construct();
         if ($p_id) {
             return $this->xget($p_id);
         } else {
             return FALSE;
         }

     }




     /*
      * ---------------------------------------------------------------
      * SET METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a colocar el atributo id
      * @param String $p_id Attr
      */
     public function set_id($p_id) {
         $this->id = $p_id;

     }




     /**
      * Vamos a colocar el atributo nombre
      * @param String $p_nombre Attr
      */
     public function set_nombre($p_nombre) {
         $this->nombre = $p_nombre;

     }




     /**
      * Vamos a colocar el atributo apellidos
      * @param String $p_apellidos Attr
      */
     public function set_apellidos($p_apellidos) {
         $this->apellidos = $p_apellidos;

     }




     /**
      * Vamos a colocar el atributo fecha_nacimiento
      * @param String $p_fecha_nacimiento Attr
      */
     public function set_fecha_nacimiento($p_fecha_nacimiento) {
         $this->fecha_nacimiento = $p_fecha_nacimiento;

     }




     /**
      * Vamos a colocar el atributo gradoAcademico
      * @param String $p_gradoAcademico Attr
      */
     public function set_gradoAcademico($p_gradoAcademico) {
         $this->gradoAcademico = $p_gradoAcademico;

     }




     /**
      * Vamos a colocar el atributo correoElectronico
      * @param String $p_correoElectronico Attr
      */
     public function set_correoElectronico($p_correoElectronico) {
         $this->correoElectronico = $p_correoElectronico;

     }




     /**
      * Vamos a colocar el atributo telefono
      * @param String $p_telefono Attr
      */
     public function set_telefono($p_telefono) {
         $this->telefono = $p_telefono;

     }




     /**
      * Vamos a colocar el atributo perfil
      * @param String $p_perfil Attr
      */
     public function set_perfil($p_perfil) {
         $this->perfil = $p_perfil;

     }




     /**
      * Vamos a colocar el atributo password
      * @param String $p_password Attr
      */
     public function set_password($p_password) {
         $this->password = $p_password;

     }




     /*
      * ---------------------------------------------------------------
      * GET METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a obtener el atributoid
      * @return String $this->id
      */
     public function get_id() {
         return $this->id;

     }




     /**
      * Vamos a obtener el atributonombre
      * @return String $this->nombre
      */
     public function get_nombre() {
         return $this->nombre;

     }




     /**
      * Vamos a obtener el atributoapellidos
      * @return String $this->apellidos
      */
     public function get_apellidos() {
         return $this->apellidos;

     }




     /**
      * Vamos a obtener el atributofecha_nacimiento
      * @return String $this->fecha_nacimiento
      */
     public function get_fecha_nacimiento() {
         return $this->fecha_nacimiento;

     }




     /**
      * Vamos a obtener el atributogradoAcademico
      * @return String $this->gradoAcademico
      */
     public function get_gradoAcademico() {
         return $this->gradoAcademico;

     }




     /**
      * Vamos a obtener el atributocorreoElectronico
      * @return String $this->correoElectronico
      */
     public function get_correoElectronico() {
         return $this->correoElectronico;

     }




     /**
      * Vamos a obtener el atributotelefono
      * @return String $this->telefono
      */
     public function get_telefono() {
         return $this->telefono;

     }




     /**
      * Vamos a obtener el atributoperfil
      * @return String $this->perfil
      */
     public function get_perfil() {
         return $this->perfil;

     }




     /**
      * Vamos a obtener el atributopassword
      * @return String $this->password
      */
     public function get_password() {
         return $this->password;

     }




     /*
      * ---------------------------------------------------------------
      * BASIC METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Inserta en PROFESOR
      * Previamente colocados sus atributos con métodos Set
      *
      */
     public function xnew() {
         $query = "INSERT INTO `PROFESOR` (`id`, `nombre`, `apellidos`, `fecha_nacimiento`, `gradoAcademico`, `correoElectronico`, `telefono`, `perfil`, `password`) VALUES ('" . $this->id . "', '" . $this->nombre . "', '" . $this->apellidos . "', '" . $this->fecha_nacimiento . "', '" . $this->gradoAcademico . "', '" . $this->correoElectronico . "', '" . $this->telefono . "', '" . $this->perfil . "', '" . $this->password . "'); ";
         return $this->run_queryx($query);

     }




     /**
      * Actualiza todos los campos de PROFESOR
      * Previamente colocados sus atributos actualizados con métodos Set 
      *
      * @param int $p_idId de PROFESOR
      */
     public function xchange($p_id) {
         $query = "UPDATE `PROFESOR` SET `nombre` = '" . $this->nombre . "', `apellidos` = '" . $this->apellidos . "', `fecha_nacimiento` = '" . $this->fecha_nacimiento . "', `gradoAcademico` = '" . $this->gradoAcademico . "', `correoElectronico` = '" . $this->correoElectronico . "', `telefono` = '" . $this->telefono . "', `perfil` = '" . $this->perfil . "', `password` = '" . $this->password . "' WHERE id = '" . $p_id . "';";
         return $this->run_queryx($query);

     }




     /**
      * Elimina definitivamente de la base de datos PROFESOR
      *
      * @param int $p_idId de PROFESOR
      */
     public function xdel($p_id) {
         $query = "DELETE FROM `PROFESOR` WHERE `id` = '" . $p_id . "';";
         return $this->run_queryx($query);

     }




     /*
      * ---------------------------------------------------------------
      * SEARCH METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Busca y Devuleve un único registro en PROFESOR
      * @access private
      * @param int $p_idId de PROFESOR
      * @param int $p_field campo UNIQUE o PRIMARY KEY de PROFESOR
      */
     private function xget($p_id, $p_field=FALSE) {
         $index = "id";
         if ($p_field)
             $index = $p_field;
         $query = "SELECT * FROM `PROFESOR` WHERE `$index` = '" . $p_id . "' LIMIT 1;";
         $result = $this->run_queryx($query);
         if ($this->get_total_rows() > 0) {
             $this->xassign($result);
             return TRUE;
         }
         return FALSE;

     }




     /**
      * Busca y Devuleve todos registro en PROFESOR
      * @param Array $p_campos Arreglo de los Campos a Seleccionar
      * @param String $p_filtro Cadena con los filtros para la búsqueda
      * @return Mixed
      */
     public function xgets($p_campos=FALSE, $p_filtro=FALSE, $p_order=FALSE) {
         $profesor = NULL;
         $campos = "*";
         $filtro = "";
         $order = "";
         if ($p_campos) {
             $campos = "`id`,";
             if (is_array($p_campos)) {
                 for ($i = 0; $i < count($p_campos); $i++) {
                     $campos .= "`" . $p_campos[$i] . "`";
                     if ($i < count($p_campos) - 1) {
                         $campos .=", ";
                     }
                 }
             } else {
                 $campos .= "`" . $p_campos . "` ";
             }
         }
         if ($p_filtro)
             $filtro = "WHERE " . $p_filtro;
         if ($p_order)
             $order = "ORDER BY `" . $p_order . "`";
         $query = "SELECT $campos FROM `PROFESOR` $filtro $order;";
         $result = $this->run_queryx($query);
         if ($this->get_total_rows() > 0) {
             while ($row = mysql_fetch_array($result)) {
                 $profesor[] = new Profesor_class($row[0]);
             }
             return $profesor;
         }
         return FALSE;

     }




     /*
      * ---------------------------------------------------------------
      * JOIN METHODS
      * ---------------------------------------------------------------
      */



     /*
      * ---------------------------------------------------------------
      * LEAVE METHODS
      * ---------------------------------------------------------------
      */

     /*
      * ---------------------------------------------------------------
      * ASSIGN METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Asignación Coloca todos los atributos del objeto encontrado mediante xget()
      * Sólo soporta un resultado
      * @access private
      * @param resource $p_queryx (query) SELECT sólo registro devuelto
      *
      */
     private function xassign($p_queryx) {
         $this->id = mysql_result($p_queryx, 0, 0);
         $this->nombre = mysql_result($p_queryx, 0, 1);
         $this->apellidos = mysql_result($p_queryx, 0, 2);
         $this->fecha_nacimiento = mysql_result($p_queryx, 0, 3);
         $this->gradoAcademico = mysql_result($p_queryx, 0, 4);
         $this->correoElectronico = mysql_result($p_queryx, 0, 5);
         $this->telefono = mysql_result($p_queryx, 0, 6);
         $this->perfil = mysql_result($p_queryx, 0, 7);
         $this->password = mysql_result($p_queryx, 0, 8);

     }




     /*
      * ---------------------------------------------------------------
      * OTHER METHODS
      * ---------------------------------------------------------------
      */



     /**
      * Vamos a obtener el ultimo mayor registro en matricula de profesor
      * @return int  
      */
     public function get_ultimomayor() {
         $query = "SELECT MAX(`id`) AS id FROM `PROFESOR`";
         $row = mysql_fetch_assoc($this->run_queryx($query));
         return $row["id"];

     }




     /**
      * Retorna el siguiente registro sugerido para matricula en profesor
      * por default incrementará en 1 no es recomendable cambiar este parámetro
      * a menos que sea muy necesario
      * @param int $incremento Cuanto deseas incrementar al último registro obtenido
      * @return int El id (id) sugerido 
      */
     public function get_siguienteID($incremento = 1) {
         return $this->get_ultimomayor() + 1;

     }




 }

 